package org.posupe.pessoas;

import java.io.Serializable;

import org.posupe.util.Endereco;

public abstract class Pessoa implements Serializable {
	private String nome;

	private Endereco endereco;

	private String email;

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public abstract String getCodigo();

	public abstract void setCodigo(String codigo);

	public Endereco getEndereco() {
		return endereco;
	}

	public void setEndereco(Endereco endereco) {
		this.endereco = endereco;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public boolean match(Pessoa pessoa) {
		boolean retorno = true;

		if(pessoa != null){
			if (pessoa.endereco != null)
				if(this.endereco != null){
					if((pessoa.endereco.getBairro() != null
							|| pessoa.endereco.getCep() != null
							|| pessoa.endereco.getCidade() != null
							|| pessoa.endereco.getComplemento() != null
							|| pessoa.endereco.getEstado() != null
							|| pessoa.endereco.getLogradouro() != null
							|| pessoa.endereco.getNumero() != null || pessoa.endereco
							.getPais() != null)
							&& (this.endereco.getBairro() != null
									|| this.endereco.getCep() != null
									|| this.endereco.getCidade() != null
									|| this.endereco.getComplemento() != null
									|| this.endereco.getEstado() != null
									|| this.endereco.getLogradouro() != null
									|| this.endereco.getNumero() != null || this.endereco
									.getPais() != null)) {
						retorno = this.endereco.match(pessoa.endereco);
					}
				}else{
					retorno = false;
				}

			
			if(retorno && pessoa.nome != null){
				if(this.nome != null){
					retorno = this.nome.contains(pessoa.nome);
				}else{
					retorno = false;
				}
			}
			
			if(retorno && pessoa.email != null){
				if(this.email != null){
					retorno = this.email.contains(pessoa.email);
				}else{
					retorno = false;
				}
			}
		
		}else{
			retorno = false;
		}
		return retorno;

	}
	
	public boolean equals(Object o) {
		boolean resultado = false;
		if (o instanceof Pessoa) {
			Pessoa aux = (Pessoa) o;
			if (aux.getCodigo().equals(this.getCodigo())) {
				resultado = true;
			}
		}
		return resultado;
	}
}
